//==============================================================================
/**
 * @file	slot_local.c
 * @brief	ミニゲーム　スロット　ローカル
 * @author	kagaya
 * @data	05.07.13
 */
//==============================================================================
#ifndef SLOT_MAIN_H_FILE
#define SLOT_MAIN_H_FILE

#include "system/render_oam.h"
#include "system/clact_util.h"
#include "system/arc_tool.h"
#include "../../field\eoa.h"
#include "system/snd_tool.h"

#include "system/bmp_list.h"
#include "system/fontproc.h"
#include "system/pm_str.h"
#include "system/wordset.h"
#include "system/fontproc.h"
#include "system/window.h"
#include "system/clact_util.h"
#include "system/selbox.h"
#include "system/touch_subwindow.h"

#include "poketool/monsno.h"

#include "msgdata/msg.naix"
#include "savedata/coin.h"
#include "savedata/record.h"

#include "slot_gs_gra.naix"	//ARC_SLOT
#include "msgdata/msg_slot.h"
#include "application/slot.h"
#include "slot_def.h"
#include "slot_data.h"
#include "slot_snd_def.h"

typedef struct _SLOT_MSG{
	MSGDATA_MANAGER *man;
	WORDSET* wset;		//ワーク
	STRBUF	*tmp;		//汎用
	STRBUF	*str;		//汎用
}SLOT_MSG;

typedef struct _SLOT_SCR{
	void*	buf;
	NNSG2dScreenData*	scr;
	u8*		dat;
	u8		siz_x;
	u8		siz_y;
}SLOT_SCR;

typedef struct _SLOT_PAL{
	void*	buf;
	NNSG2dPaletteData*	pal;
	u16*	dat;
}SLOT_PAL;

typedef struct _TAG_SLOTMAIN SLOTMAIN;

//--------------------------------------------------------------
///	リール制御用構造体
//--------------------------------------------------------------
typedef struct _REEL_CONTROL{
	int			seq_no;
	u16			frame;
	s16			slip_dot_y;
	s16			slip_grid_y;
	u8			scroll_flag;
	u8				target_idx;
	REEL_PATTERN	target;
	REEL_NUM	reel_no;
	TCB_PTR		tcb;
	SLOTMAIN*	smp;
}REEL_CONTROL;

//--------------------------------------------------------------
///	上画面BGアニメ制御構造体
//--------------------------------------------------------------
typedef struct _BGU_BACK_ANM{
	u8	stop_f:1;
	u8	move_f:1;
	u8	dmy:6;
	TCB_PTR	tcb;
}BGU_BACK_ANM;

//--------------------------------------------------------------
///	SLOTMAIN構造体
//--------------------------------------------------------------
typedef struct _TAG_SLOTMAIN
{
	int	heapID;
	int main_seq;		///<シーケンス
	int sub_seq;		///<シーケンス
	int game_seq;		///<シーケンス
	int game_next_seq;		///<シーケンス

	SLOT_PARAM *param;
	COIN* coin_sv;
	RECORD* rec_sv;	//レコードセーブデータ

	int	key_mode;
	u8	msg_spd;
	u8	win_type;
	u8	force_end_code;	//強制終了コード

	int	credit;
	int	payout;
	int bet;
	int eff_tcb_ct;

	u8	hard;		//難易度コード
	u8	mode;			//ゲームモード
	u8	next_mode;		//ゲームモード
	u8	lot_basic;	//基本抽選コード
	u8	lot_ex;		//拡張抽選コード

	u8	bonus_code;	//ボーナス抽選
	u8	bonus_round;		//現在のラウンド数
	u8	bonus_round_max;	//ラウンドMAX数
	u8	bonus_win_ct;		//ボーナスゲームの成功数
	u8	bonus_record;		//連荘数
	u8	bonus_payout;		//ボーナスゲームの支払い
	u8	bonus_reel_ct;		//ボーナスゲームリールカウンタ
	u8	bonus_reel_idx;		//ボーナスゲームカレントリールindex

	u16	bonus_credit[2];	//ボーナスの支払いに加算される値
	u16	bonus_get_ct;		//ボーナスゲームで取得したコイン

	u8	consec_win;			//連荘数
	s8	stress_ct;			//ストレスカウンター

	u8	reel_speed;
	u8	reel_speed_id;
	u8	reel_auto[REEL_MAX];
	u8	reel_reverce[REEL_MAX];
	u8	reel_move[REEL_MAX];
	s16	reel_dot_y[REEL_MAX];
	s16	reel_ofs_y[REEL_MAX];
	s16	reel_grid_y[REEL_MAX];

	u32 bonus_game_f:1;
	u32 game_cancel_f:1;
	u32 replay_f:1;
	u32 reach_f:1;
	u32 super_reach_f:1;
	u32 back_btn_passive_f:1;
	u32 consec_f:1;
	u32 lot_fix_f:1;
	u32 flag_dmy:24;

	int				wait;
	int				hit_num;
	LINE_CODE		hit_line[LINE_CODE_MAX];
	int				reach_code[LINE_CODE_MAX];
	u8				win_code;
	u8				win_line;
	u8				bonus_reach;

	REEL_CONTROL	reel[REEL_MAX];

	int				i_buf[8];	//汎用バッファ

	u8				reel_lamp_anm[REEL_MAX];
	BGU_BACK_ANM	bgu_anm[BGU_BACK_CODE_MAX];	//スクロールアニメ管理
	BGU_BACK_ANM	bgu_palanm[BGU_BACK_CODE_MAX];	//パレットアニメ管理
	BGU_BACK_CODE	now_bgu_anm;

	///////////////////////////////////////////////////
	u16				old_bgm;
	SLOT_MSG		msg;

	GF_BGL_INI		*bgl;
	SELBOX_SYS		*sbox;
	TOUCH_SW_SYS*	ynbtn_wk;

	GF_BGL_BMPWIN		win[WIN_MAX];
	PALETTE_FADE_PTR	palAnm;		///<パレットアニメワーク

	CATS_SYS_PTR	pActSys;	///<セルアクターシステム
	CATS_RES_PTR	pActRes;	///<セルアクターリソース

	CLACT_WORK_PTR		pAct[SLOT_ACTMAX];		///<アクター
	CLACT_WORK_PTR		pAReel[REEL_ACTMAX];		///<アクター
//	CATS_ACT_PTR		pAPanel[PANEL_ACTMAX];

	///グラフィックリソース
	SLOT_SCR	sd_num;
	SLOT_SCR	su_guide;
	SLOT_SCR	su_pict;
	SLOT_SCR	su_anm[SLOT_MCHG_ANM_NUM];
	SLOT_PAL	pu_back;

	ARCHANDLE* gra_h;

	void*	pSBufFl;
	void*	pSBufWin;
	NNSG2dScreenData*	pSFl;
	NNSG2dScreenData*	pSWin;

#ifdef PM_DEBUG
	u16	deb_print_f:1;
	u16	deb_auto_f:1;
	u16	deb_dmy:14;
	u16	deb_auto_ct;
	u8	deb_lot_basic;
	u8	deb_lot_ex;
	GF_BGL_BMPWIN		deb_win;

	int	deb_play_ct;
	int	deb_lot_ct[PRIZE_CODE_MAX][2];
#endif	//PM_DEBUG
}SLOTMAIN;

#define SLOTMAIN_SIZE (sizeof(SLOTMAIN))

//==============================================================================
//	外部参照
//==============================================================================

#endif //SLOT_MAIN_H_FILE